10808
4435
Μπορώ να χρησιμοποιήσω σχόλια μέσα σε ένα αρχείο JSON; Εάν ναι, πώς; 
1
2
Επόμενο
Οχι.
Το JSON είναι μόνο δεδομένα και αν συμπεριλάβετε ένα σχόλιο, τότε θα είναι και δεδομένα.
Θα μπορούσατε να έχετε ένα καθορισμένο στοιχείο δεδομένων που ονομάζεται "_comment" (ή κάτι τέτοιο) που θα πρέπει να αγνοηθεί από εφαρμογές που χρησιμοποιούν τα δεδομένα JSON.
Θα ήταν καλύτερα να έχετε το σχόλιο στις διαδικασίες που δημιουργούν / λαμβάνουν το JSON, καθώς υποτίθεται ότι γνωρίζουν ποια θα είναι τα δεδομένα JSON εκ των προτέρων, ή τουλάχιστον η δομή τους.
Αλλά αν αποφασίσατε να:
{
"_comment": "το κείμενο σχολίων πηγαίνει εδώ ...",
"γλωσσάρι": {
"title": "παράδειγμα γλωσσάρι",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"Ταξινόμηση": "SGML",
"GlossTerm": "Τυπική γενικευμένη γλώσσα σήμανσης",
"Ακρωνύμιο": "SGML",
"Abbrev": "ISO 8879: 1986",
"GlossDef": {
"para": "Μια γλώσσα μετα-σήμανσης, που χρησιμοποιείται για τη δημιουργία γλωσσών σήμανσης όπως το DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "σήμανση"
}
}
}
}
}
|
Όχι, δεν επιτρέπονται σχόλια στη φόρμα //… ή / *… * / στο JSON. Αυτή η απάντηση βασίζεται:
https://www.json.org
RFC 4627:
Η εφαρμογή / τύπος μέσων json για σημείωση αντικειμένων JavaScript (JSON)
RFC 8259 Η μορφή ανταλλαγής δεδομένων σημείωσης αντικειμένου JavaScript (JSON)
|
Συμπεριλάβετε σχόλια αν το επιλέξετε. αφαιρέστε τα με ένα minifier πριν από την ανάλυση ή τη μετάδοση.
Μόλις κυκλοφόρησα το JSON.minify () που αφαιρεί σχόλια και κενό διάστημα από ένα μπλοκ του JSON και το καθιστά έγκυρο JSON που μπορεί να αναλυθεί. Έτσι, μπορείτε να το χρησιμοποιήσετε όπως:
JSON.parse (JSON.minify (my_str));
Όταν το κυκλοφόρησα, έχω μια τεράστια αντίδραση ανθρώπων που διαφωνούν ακόμη και με την ιδέα, γι 'αυτό αποφάσισα να γράψω μια περιεκτική ανάρτηση ιστολογίου για το γιατί τα σχόλια έχουν νόημα στο JSON Περιλαμβάνει αυτό το αξιοσημείωτο σχόλιο από τον δημιουργό του JSON:
Ας υποθέσουμε ότι χρησιμοποιείτε το JSON για να διατηρείτε αρχεία διαμόρφωσης, τα οποία θα θέλατε να σχολιάσετε. Προχωρήστε και εισαγάγετε όλα τα σχόλια που σας αρέσουν. Στη συνέχεια, διοχετεύστε το μέσω JSMin πριν το παραδώσετε στον αναλυτή JSON. - Ντάγκλας Κρόκφορντ, 2012
Ας ελπίσουμε ότι είναι χρήσιμο σε όσους διαφωνούν με το γιατί το JSON.minify () θα μπορούσε να είναι χρήσιμο.
|
Τα σχόλια αφαιρέθηκαν από το JSON από το σχεδιασμό.
Κατάργησα τα σχόλια από το JSON επειδή είδα ότι οι άνθρωποι τα χρησιμοποιούσαν για να κρατήσουν οδηγίες ανάλυσης, μια πρακτική που θα είχε καταστρέψει τη διαλειτουργικότητα. Γνωρίζω ότι η έλλειψη σχολίων κάνει μερικούς ανθρώπους λυπημένους, αλλά δεν θα έπρεπε.
Ας υποθέσουμε ότι χρησιμοποιείτε το JSON για να διατηρείτε αρχεία διαμόρφωσης, τα οποία θα θέλατε να σχολιάσετε. Προχωρήστε και εισαγάγετε όλα τα σχόλια που σας αρέσουν. Στη συνέχεια, διοχετεύστε το μέσω JSMin πριν το παραδώσετε στον αναλυτή JSON.
Πηγή: Δημόσια δήλωση του Ντάγκλας Κρόκφορντ για το G +
|
Το JSON δεν υποστηρίζει σχόλια. Επίσης, δεν προοριζόταν ποτέ να χρησιμοποιηθεί για αρχεία διαμόρφωσης όπου θα χρειαζόταν σχόλια.
Το Hjson είναι μια μορφή αρχείου διαμόρφωσης για ανθρώπους. Χαλαρή σύνταξη, λιγότερα λάθη, περισσότερα σχόλια.
Ανατρέξτε στο hjson.github.io για βιβλιοθήκες JavaScript, Java, Python, PHP, Rust, Go, Ruby, C ++ και C #.
|
ΑΠΟΠΟΙΗΣΗ ΑΠΟΠΟΙΗΣΗΣ: Η ΕΓΓΥΗΣΗ ΣΑΣ ΕΙΝΑΙ ΑΠΟΚΤΗΣΗ
Όπως έχει επισημανθεί, αυτό το hack εκμεταλλεύεται την εφαρμογή των προδιαγραφών. Δεν καταλαβαίνουν όλοι οι αναλυτές του JSON αυτό το είδος JSON. Ειδικότερα, οι αναλυτές ροής θα πνιγούν.
Είναι μια ενδιαφέρουσα περιέργεια, αλλά δεν πρέπει να το χρησιμοποιείτε καθόλου. Παρακάτω είναι η αρχική απάντηση.
Βρήκα μια μικρή παραβίαση που σας επιτρέπει να τοποθετήσετε σχόλια σε ένα αρχείο JSON που δεν θα επηρεάσει την ανάλυση ή να αλλάξει τα δεδομένα που αντιπροσωπεύονται με οποιονδήποτε τρόπο.
Φαίνεται ότι όταν δηλώνετε ένα αντικείμενο κυριολεκτικά μπορείτε να καθορίσετε δύο τιμές με το ίδιο κλειδί και η τελευταία να προηγείται. Είτε το πιστεύετε είτε όχι, αποδεικνύεται ότι οι αναλυτές του JSON λειτουργούν με τον ίδιο τρόπο. Μπορούμε λοιπόν να το χρησιμοποιήσουμε για να δημιουργήσουμε σχόλια στην πηγή JSON που δεν θα είναι παρόντα σε μια αναπαράσταση αντικειμένου.
({a: 1, a: 2});
// => Αντικείμενο {a: 2}
Object.keys (JSON.parse ('{"a": 1, "a": 2}')). Μήκος;
// => 1
Εάν εφαρμόσουμε αυτήν την τεχνική, το αρχείο JSON που σχολιάσατε μπορεί να έχει την εξής μορφή:
{
"api_host": "Το όνομα κεντρικού υπολογιστή του διακομιστή API. Μπορείτε επίσης να καθορίσετε τη θύρα.",
"api_host": "hodorhodor.com",
"retry_interval": "Το διάστημα σε δευτερόλεπτα μεταξύ της επανάληψης αποτυχημένων κλήσεων API",
"retry_interval": 10,
"auth_token": "Το διακριτικό ελέγχου ταυτότητας. Είναι διαθέσιμο στον πίνακα ελέγχου προγραμματιστή στην περιοχή" Ρυθμίσεις "",
"auth_token": "5ad0eb93697215bc0d48a7b69aa6fb8b",
"favourites_numbers": "Ένας πίνακας που περιέχει τους αγαπημένους μου αριθμούς όλων των εποχών",
"favourites_numbers": [19, 13, 53]
}
Ο παραπάνω κωδικός είναι έγκυρος JSON. Εάν το αναλύσετε, θα λάβετε ένα αντικείμενο σαν αυτό:
{
"api_host": "hodorhodor.com",
"retry_interval": 10,
"auth_token": "5ad0eb93697215bc0d48a7b69aa6fb8b",
"favourites_numbers": [19,13,53]
}
Αυτό σημαίνει ότι δεν υπάρχει ίχνος από τα σχόλια και δεν θα έχουν παράξενες παρενέργειες.
Καλό χάκερ!
|
Σκεφτείτε να χρησιμοποιήσετε το YAML. Είναι σχεδόν ένα υπερσύνολο του JSON (σχεδόν όλο το έγκυρο JSON είναι έγκυρο YAML) και επιτρέπει σχόλια.
|
Δεν μπορείς. Τουλάχιστον αυτή είναι η εμπειρία μου από μια γρήγορη ματιά στο json.org.
Το JSON έχει τη σύνταξή τουαπεικονίζεται σε αυτήν τη σελίδα. Δεν υπάρχει καμία σημείωση σχετικά με τα σχόλια.
|
Τα σχόλια δεν είναι επίσημα πρότυπα, αν και ορισμένοι αναλυτές υποστηρίζουν σχόλια τύπου C ++. Ένα που χρησιμοποιώ είναι το JsonCpp. Στα παραδείγματα υπάρχει αυτό:
// Επιλογές διαμόρφωσης
{
// Προεπιλεγμένη κωδικοποίηση για κείμενο
"κωδικοποίηση": "UTF-8",
// Τα πρόσθετα φορτώθηκαν κατά την εκκίνηση
"προσθήκες": [
"Πύθων",
"c ++",
"ρουμπίνι"
],
// Μέγεθος εσοχής καρτέλας
"indent": {"length": 3, "use_space": true}
}
Το jsonlint δεν το επικυρώνει. Επομένως, τα σχόλια είναι μια αναλυτική συγκεκριμένη επέκταση και όχι τυπική.
Ένας άλλος αναλυτής είναι το JSON5.
Μια εναλλακτική λύση για το JSON TOML.
Μια άλλη εναλλακτική λύση είναι το jsonc.
Η τελευταία έκδοση του nlohmann / json έχει προαιρετική υποστήριξη για την παράβλεψη σχολίων σχετικά με την ανάλυση.
|
Θα πρέπει να γράψετε ένα σχήμα JSON. Το σχήμα JSON είναι προς το παρόν μια προτεινόμενη προδιαγραφή πρόχειρου Διαδικτύου. Εκτός από την τεκμηρίωση, το σχήμα μπορεί επίσης να χρησιμοποιηθεί για την επικύρωση των δεδομένων JSON.
Παράδειγμα:
{
"περιγραφή": "Ένα άτομο",
"type": "αντικείμενο",
"ιδιότητες":
{
"όνομα":
{
"type": "string"
},
"ηλικία":
{
"type": "ακέραιος",
"μέγιστο": 125
}
}
}
Μπορείτε να παρέχετε τεκμηρίωση χρησιμοποιώντας το χαρακτηριστικό σχήμα περιγραφής.
|
Εάν χρησιμοποιείτε το Jackson ως πρόγραμμα ανάλυσης JSON, τότε μπορείτε να το επιτρέψετε να επιτρέπει σχόλια:
ObjectMapper mapper = νέο ObjectMapper (). Configigure (Feature.ALLOW_COMMENTS, true)
Τότε μπορείτε να έχετε σχόλια όπως αυτό:
{
κλειδί: "value" // Σχόλιο
}
Και μπορείτε επίσης να έχετε σχόλια ξεκινώντας από # ρυθμίζοντας:
mapper.configure (Feature.ALLOW_YAML_COMMENTS, true);
Αλλά γενικά (όπως απαντήθηκε προηγουμένως) η προδιαγραφή δεν επιτρέπει σχόλια.
|
Εδώ είναι αυτό που βρήκα στην τεκμηρίωση του Google Firebase που σας επιτρέπει να υποβάλλετε σχόλια στο JSON:
{
"//": "Ορισμένα προγράμματα περιήγησης θα το χρησιμοποιήσουν για να ενεργοποιήσουν τις ειδοποιήσεις push.",
"//": "Είναι το ίδιο για όλα τα έργα, αυτό δεν είναι το αναγνωριστικό αποστολέα του έργου σας",
"gcm_sender_id": "1234567890"
}
|
ΟΧΙ. Το JSON υποστήριζε σχόλια, αλλά καταχρήθηκαν και καταργήθηκαν από το πρότυπο
Από τον δημιουργό του JSON:
Κατάργησα τα σχόλια από το JSON επειδή είδα ότι οι άνθρωποι τα χρησιμοποιούσαν για να κρατήσουν οδηγίες ανάλυσης, μια πρακτική που θα είχε καταστρέψει τη διαλειτουργικότητα. Γνωρίζω ότι η έλλειψη σχολίων κάνει μερικούς ανθρώπους λυπημένους, αλλά δεν θα έπρεπε. - Ντάγκλας Κρόκφορντ, 2012
Ο επίσημος ιστότοπος JSON βρίσκεται στο JSON.org. Το JSON ορίζεται ως πρότυπο από την ECMA International. Υπάρχει πάντα μια διαδικασία αναφοράς για αναθεώρηση των προτύπων. Είναι απίθανο να προστεθούν σχολιασμοί στο πρότυπο JSON για διάφορους λόγους.
Το JSON by design είναι μια εναλλακτικά εύκολη αντίστροφη (ανθρώπινη ανάλυση) εναλλακτική λύση στο XML. Απλοποιείται ακόμη και στο σημείο που οι σχολιασμοί είναι περιττοί. Δεν είναι καν γλώσσα σήμανσης. Ο στόχος είναι η σταθερότητα και η διαλειτουργικότητα.
Όποιος καταλαβαίνει τη σχέση "has-a" του αντικειμενικού προσανατολισμού μπορεί να καταλάβει οποιαδήποτε δομή JSON - αυτό είναι το νόημα. Είναι απλώς ένα κατευθυνόμενο ακυκλικό γράφημα (DAG) με ετικέτες κόμβων (ζεύγη κλειδιών / τιμών), που είναι σχεδόν καθολική δομή δεδομένων.
Αυτός ο μόνος σχολιασμός που απαιτείται μπορεί να είναι "// Αυτές είναι ετικέτες DAG". Τα βασικά ονόματα μπορούν να είναι όσο πιο ενημερωτικά απαιτούνται, επιτρέποντας την αυθαίρετη σημασιολογική αυστηρότητα.
Οποιαδήποτε πλατφόρμα μπορεί να αναλύσει το JSON με λίγες γραμμές κώδικα. Το XML απαιτεί σύνθετες βιβλιοθήκες OO που δεν είναι βιώσιμες σε πολλές πλατφόρμες.
Οι σχολιασμοί θα κάνουν το JSON να κάνει λιγότερο διαλειτουργικό. Δεν υπάρχει τίποτα άλλο να προσθέσετε, εκτός αν αυτό που πραγματικά χρειάζεστε είναι μια γλώσσα σήμανσης (XML) και δεν σας ενδιαφέρει εάν τα δεδομένα που έχετε διατηρήσει εύκολα αναλύονται.
ΑΛΛΑ όπως παρατήρησε και ο δημιουργός του JSON, υπήρχε πάντα υποστήριξη JS αγωγού για σχόλια:
Προχωρήστε και εισαγάγετε όλα τα σχόλια που σας αρέσουν.
Στη συνέχεια, διοχετεύστε το μέσω JSMin πριν το παραδώσετε στον αναλυτή JSON. - Ντάγκλας Κρόκφορντ, 2012
|
Εάν το αρχείο κειμένου σας, το οποίο είναι μια συμβολοσειρά JSON, πρόκειται να διαβαστεί από κάποιο πρόγραμμα, πόσο δύσκολο θα ήταν να αφαιρέσετε σχόλια τύπου C ή C ++ πριν το χρησιμοποιήσετε;
Απάντηση: Θα ήταν ένα μόνο σκάφος. Εάν το κάνετε αυτό, τότε τα αρχεία JSON θα μπορούσαν να χρησιμοποιηθούν ως αρχεία διαμόρφωσης.
|
Εάν χρησιμοποιείτε τη βιβλιοθήκη Newtonsoft.Json με ASP.NET για ανάγνωση / αποεπιλογή, μπορείτε να χρησιμοποιήσετε σχόλια στο περιεχόμενο JSON:
// "name": "string"
// "id": int
ή
/* Αυτό είναι ένα
παράδειγμα σχολίου * /
PS: Τα σχόλια μιας γραμμής υποστηρίζονται μόνο με 6+ εκδόσεις του Newtonsoft Json.
Πρόσθετη σημείωση για άτομα που δεν μπορούν να σκέφτονται έξω: Χρησιμοποιώ τη μορφή JSON για βασικές ρυθμίσεις σε μια εφαρμογή ιστού ASP.NET που έκανα. Διαβάζω το αρχείο, το μετατρέπω σε αντικείμενο ρυθμίσεων με τη βιβλιοθήκη Newtonsoft και το χρησιμοποιώ όταν είναι απαραίτητο.
Προτιμώ να γράφω σχόλια για κάθε μεμονωμένη ρύθμιση στο ίδιο το αρχείο JSON και πραγματικά δεν με νοιάζει για την ακεραιότητα της μορφής JSON εφόσον η βιβλιοθήκη που χρησιμοποιώ είναι εντάξει.
Νομίζω ότι αυτός είναι ένας «ευκολότερος στη χρήση / κατανοητός» τρόπος από τη δημιουργία ενός ξεχωριστού αρχείου ρυθμίσεων. README και εξηγώντας τις ρυθμίσεις σε αυτό.
Εάν έχετε πρόβλημα με αυτό το είδος χρήσης? συγγνώμη, η τζίνι είναι έξω από τη λάμπα. Οι άνθρωποι θα βρουν άλλες χρήσεις γιαΜορφή JSON και δεν μπορείτε να κάνετε τίποτα για αυτό.
|
Η ιδέα πίσω από το JSON είναι να παρέχει απλή ανταλλαγή δεδομένων μεταξύ εφαρμογών. Συνήθως βασίζονται στον ιστό και η γλώσσα είναι JavaScript.
Δεν επιτρέπει πραγματικά σχόλια ως τέτοια, ωστόσο, η διαβίβαση ενός σχολίου ως ένα από τα ζεύγη ονόματος / τιμής στα δεδομένα θα λειτουργούσε σίγουρα, αν και αυτά τα δεδομένα προφανώς θα πρέπει να αγνοηθούν ή να αντιμετωπιστούν ειδικά από τον κώδικα ανάλυσης.
Ωστόσο, δεν είναι πρόθεση το αρχείο JSON να περιέχει σχόλια με την παραδοσιακή έννοια. Θα πρέπει απλώς να είναι τα δεδομένα.
Ρίξτε μια ματιά στον ιστότοπο JSON για περισσότερες λεπτομέρειες.
|
Το JSON δεν υποστηρίζει σχόλια εγγενώς, αλλά μπορείτε να φτιάξετε τον δικό σας αποκωδικοποιητή ή τουλάχιστον προεπεξεργαστή για να αφαιρέσετε σχόλια, αυτό είναι εντάξει (αρκεί να αγνοήσετε τα σχόλια και να μην τα χρησιμοποιήσετε για να καθοδηγήσετε τον τρόπο με τον οποίο η εφαρμογή σας πρέπει να επεξεργάζεται τα δεδομένα JSON ).
Το JSON δεν έχει σχόλια. Ένας κωδικοποιητής JSON ΔΕΝ ΠΡΕΠΕΙ να εξάγει σχόλια.
Ένας αποκωδικοποιητής JSON ΜΠΟΡΕΙ να αποδεχτεί και να αγνοήσει τα σχόλια.
Τα σχόλια δεν πρέπει ποτέ να χρησιμοποιούνται για τη μετάδοση οτιδήποτε έχει νόημα. Αυτό είναι
σε τι χρησιμεύει η JSON.
Πρ .: Douglas Crockford, συγγραφέας JSON spec.
|
Απλώς συναντώ αυτό για αρχεία διαμόρφωσης. Δεν θέλω να χρησιμοποιήσω τη μορφή XML (λεκτική, γραφική, άσχημη, δύσκολη στην ανάγνωση) ή "in" (χωρίς ιεραρχία, κανένα πραγματικό πρότυπο κ.λπ.) ή μορφή Java "Properties" (όπως .ini).
Το JSON μπορεί να κάνει ό, τι μπορεί, αλλά είναι πολύ λιγότερο λεκτικό και πιο αναγνώσιμο από τον άνθρωπο - και οι αναλυτές είναι εύκολο και πανταχού παρόν σε πολλές γλώσσες. Είναι απλώς ένα δέντρο δεδομένων. Όμως, τα σχόλια εκτός ζώνης είναι συχνά ανάγκη να τεκμηριώνονται οι "προεπιλεγμένες" διαμορφώσεις και παρόμοια. Οι διαμορφώσεις δεν πρέπει ποτέ να είναι "πλήρη έγγραφα", αλλά δέντρα αποθηκευμένων δεδομένων που μπορούν να είναι αναγνώσιμα από τον άνθρωπο όταν χρειάζεται.
Υποθέτω ότι θα μπορούσε κανείς να χρησιμοποιήσει το "#": "comment", για το "valid" JSON.
|
Εξαρτάται από τη βιβλιοθήκη JSON. Το Json.NET υποστηρίζει σχόλια σε στυλ JavaScript, / * commment * /.
Δείτε μια άλλη ερώτηση Stack Overflow.
|
Το JSON έχει πολύ νόημα για αρχεία ρυθμίσεων και για άλλη τοπική χρήση επειδή είναι πανταχού παρόν και επειδή είναι πολύ απλούστερο από το XML.
Εάν οι άνθρωποι έχουν ισχυρούς λόγους να μην έχουν σχόλια στο JSON κατά την επικοινωνία δεδομένων (είτε είναι έγκυρα είτε όχι), τότε πιθανώς το JSON θα μπορούσε να χωριστεί σε δύο:
JSON-COM: JSON στο καλώδιο ή κανόνες που ισχύουν κατά την επικοινωνία δεδομένων JSON.
JSON-DOC: JSON έγγραφο, ή JSON σε αρχεία ή τοπικά. Κανόνες που ορίζουν ένα έγκυρο έγγραφο JSON.
Το JSON-DOC θα επιτρέπει σχόλια και ενδέχεται να υπάρχουν και άλλες μικρές διαφορές, όπως ο χειρισμός του κενού χώρου. Οι αναλυτές μπορούν εύκολα να μετατρέψουν από τη μία προδιαγραφή στην άλλη.
Όσον αφορά την παρατήρηση που έκανε ο Ντάγκλας Κρόκφορντ σχετικά με αυτά τα θέματα (αναφέρεται από τον @Artur Czajka)
Ας υποθέσουμε ότι χρησιμοποιείτε το JSON για να διατηρείτε αρχεία διαμόρφωσης, τα οποία θα θέλατε να σχολιάσετε. Προχωρήστε και εισαγάγετε όλα τα σχόλια που σας αρέσουν. Στη συνέχεια, διοχετεύστε το μέσω JSMin πριν το παραδώσετε στον αναλυτή JSON.
Μιλάμε για ένα γενικό ζήτημα αρχείου διαμόρφωσης (διαγώνια γλώσσα / πλατφόρμα) και απαντά με ένα συγκεκριμένο βοηθητικό πρόγραμμα JS!
Σίγουρα ένα JSON συγκεκριμένο minify μπορεί να εφαρμοστεί σε οποιαδήποτε γλώσσα,
αλλά τυποποιήστε το έτσι ώστε να είναι πανταχού παρόν σε αναλυτές σε όλες τις γλώσσες και τις πλατφόρμες, έτσι ώστε οι άνθρωποι να σταματήσουν να χάνουν το χρόνο τους χωρίς τη δυνατότητα, επειδή έχουν καλές περιπτώσεις χρήσης, αναζητούν το ζήτημα σε διαδικτυακά φόρουμ και κάνουν τους ανθρώπους να τους λένε ότι είναι κακή ιδέα ή υποδηλώνοντας ότι είναι εύκολο να εφαρμόσετε απογύμνωση σχολίων από αρχεία κειμένου.
Το άλλο ζήτημα είναι η διαλειτουργικότητα. Ας υποθέσουμε ότι έχετε μια βιβλιοθήκη ή API ή οποιοδήποτε είδος υποσυστήματος που έχει κάποια αρχεία διαμόρφωσης ή δεδομένων που σχετίζονται με αυτό. Και αυτό το υποσύστημα είναι
για πρόσβαση από διαφορετικές γλώσσες. Τότε θα πείτε στους ανθρώπους: παρεμπιπτόντως
μην ξεχάσετε να αφαιρέσετε τα σχόλια από τα αρχεία JSON πριν τα διαβιβάσετε στον αναλυτή!
|
Εάν χρησιμοποιείτε το JSON5 μπορείτε να συμπεριλάβετε σχόλια.
Το JSON5 είναι μια προτεινόμενη επέκταση στο JSON που στοχεύει να διευκολύνει τους ανθρώπους να γράφουν και να συντηρούν με το χέρι. Αυτό το κάνει προσθέτοντας μερικές ελάχιστες δυνατότητες σύνταξης απευθείας από το ECMAScript 5.
|
Η εργαλειοθήκη JavaScript Dojo Toolkit (τουλάχιστον από την έκδοση 1.4), σας επιτρέπει να συμπεριλάβετε σχόλια στο JSON σας. Τα σχόλια μπορεί να είναι / * * / μορφή. Το Dojo Toolkit καταναλώνει το JSON μέσω της κλήσης dojo.xhrGet ().
Άλλα κιτ εργαλείων JavaScript ενδέχεται να λειτουργούν παρόμοια.
Αυτό μπορεί να είναι χρήσιμο κατά τον πειραματισμό με εναλλακτικές δομές δεδομένων (ή ακόμα και λίστες δεδομένων) προτού ορίσετε μια τελική επιλογή.
|
Το JSON δεν είναι πρωτόκολλο με πλαίσιο. Είναι μια μορφή χωρίς γλώσσα. Επομένως, η μορφή ενός σχολίου δεν καθορίζεται για το JSON.
Όπως έχουν προτείνει πολλά άτομα, υπάρχουν μερικά κόλπα, για παράδειγμα, διπλά πλήκτρα ή ένα συγκεκριμένο κλειδί _comment που μπορείτε να χρησιμοποιήσετε. Από σένα εξαρτάται.
|
Μπορείτε να έχετε σχόλια στο JSONP, αλλά όχι σε καθαρό JSON. Μόλις πέρασα μια ώρα προσπαθώντας να κάνω το πρόγραμμά μου να λειτουργεί με αυτό το παράδειγμα από τα Highcharts: http://www.highcharts.com/samples/data/jsonp.php?filename=aapl-c.json&callback=?
Εάν ακολουθήσετε τον σύνδεσμο, θα δείτε
? (/ * AAPLδεδομένα ιστορικού OHLC από το Google Finance API * /
[
/ * Μάιος 2006 * /
[1147651200000,67,79],
[1147737600000,64,98],
...
[1368057600000,456,77],
[1368144000000,452,97]
]);
Δεδομένου ότι είχα ένα παρόμοιο αρχείο στον τοπικό φάκελό μου, δεν υπήρχαν προβλήματα με την πολιτική ίδιας προέλευσης, οπότε αποφάσισα να χρησιμοποιήσω καθαρό JSON ... και, φυσικά, το $ .getJSON απέτυχε σιωπηλά λόγω των σχολίων.
Τελικά μόλις έστειλα ένα μη αυτόματο αίτημα HTTP στην παραπάνω διεύθυνση και συνειδητοποίησα ότι ο τύπος περιεχομένου ήταν κείμενο / javascript, καθώς, το JSONP επιστρέφει καθαρή JavaScript Σε αυτήν την περίπτωση επιτρέπονται σχόλια. Αλλά η εφαρμογή μου επέστρεψε την εφαρμογή τύπου-json, οπότε έπρεπε να αφαιρέσω τα σχόλια.
|
Αυτή είναι μια ερώτηση "μπορείτε". Και εδώ είναι μια «ναι» απάντηση.
Όχι, δεν πρέπει να χρησιμοποιείτε διπλά μέλη αντικειμένων για να συμπληρώσετε δεδομένα πλευρικών καναλιών σε κωδικοποίηση JSON. (Βλέπε "Τα ονόματα σε ένα αντικείμενο ΠΡΕΠΕΙ να είναι μοναδικά" στο RFC).
Και ναι, θα μπορούσατε να εισαγάγετε σχόλια γύρω από το JSON, τα οποία θα μπορούσατε να αναλύσετε.
Αλλά αν θέλετε έναν τρόπο εισαγωγής και εξαγωγής αυθαίρετων δεδομένων πλευρικού καναλιού σε ένα έγκυρο JSON, εδώ είναι μια απάντηση. Εκμεταλλευόμαστε τη μη μοναδική αναπαράσταση δεδομένων σε κωδικοποίηση JSON. Αυτό επιτρέπεται * στην ενότητα δύο του RFC στην ενότητα "Το κενό διάστημα επιτρέπεται πριν ή μετά από οποιονδήποτε από τους έξι δομικούς χαρακτήρες".
* Το RFC δηλώνει μόνο "επιτρέπεται το κενό διάστημα πριν ή μετά από οποιονδήποτε από τους έξι δομικούς χαρακτήρες", χωρίς να αναφέρονται ρητά οι συμβολοσειρές, οι αριθμοί, "false", "true" και "null". Αυτή η παράλειψη αγνοείται σε ΟΛΕΣ τις υλοποιήσεις.
Αρχικά, κανονικοποιήστε το JSON ελαχιστοποιώντας το:
$ jsonMin = json_encode (json_decode ($ json));
Στη συνέχεια, κωδικοποιήστε το σχόλιό σας σε δυαδικό:
$ hex = αποσυσκευασία ('H *', $ σχόλιο);
$ commentBinary = base_convert ($ hex [1], 16, 2);
Στη συνέχεια, τραβήξτε το δυαδικό σας:
$ steg = str_replace ('0', '', $ commentBinary);
$ steg = str_replace ('1', "\ t", $ steg);
Εδώ είναι η παραγωγή σας:
$ jsonWithComment = $ steg. $ jsonMin;
|
Αποποίηση ευθυνών: Αυτό είναι ανόητο
Υπάρχει πραγματικά ένας τρόπος να προσθέσετε σχόλια και να παραμείνετε εντός των προδιαγραφών (δεν απαιτείται πρόσθετος αναλυτής). Ωστόσο, δεν θα οδηγήσει σε αναγνώσιμα από τον άνθρωπο σχόλια χωρίς καμία ανάλυση.
Θα μπορούσατε να κάνετε κατάχρηση των παρακάτω:
Το ασήμαντο κενό επιτρέπεται πριν ή μετά από οποιοδήποτε διακριτικό.
Το κενό διάστημα είναι οποιαδήποτε ακολουθία ενός ή περισσότερων από τον ακόλουθο κώδικα
σημεία: πίνακας χαρακτήρων (U + 0009), τροφοδοσία γραμμής (U + 000A), μεταφορά
επιστροφή (U + 000D) και κενό (U + 0020).
Με χακαριστικό τρόπο, μπορείτε να το κάνετε κατάχρηση για να προσθέσετε ένα σχόλιο. Για παράδειγμα: ξεκινήστε και τερματίστε το σχόλιό σας με μια καρτέλα. Κωδικοποιήστε το σχόλιο στη βάση3 και χρησιμοποιήστε τους άλλους χαρακτήρες κενών για να τα αντιπροσωπεύσετε. Για παράδειγμα.
010212 010202 011000 011000 011010 001012 010122 010121 011021 010202 001012 011022 010212 011020 010202 010202
(γειά σου βάση τρία στο ASCII) Αλλά αντί του 0 χρησιμοποιήστε χώρο, για 1 χρήση τροφοδοσίας γραμμής και για 2 χρήση επιστροφής μεταφοράς.
Αυτό θα σας αφήσει απλώς ένα πολύ δυσανάγνωστο κενό διάστημα (εκτός κι αν κάνετε μια προσθήκη IDE για να την κωδικοποιήσετε / αποκωδικοποιήσετε εν κινήσει).
Ποτέ δεν το δοκίμασα, για προφανείς λόγους, ούτε και εσείς.
|
Το JSON δεν επιτρέπει σχόλια, καθαυτά. Ο συλλογισμός είναι εντελώς ανόητος, επειδή μπορείτε να χρησιμοποιήσετε το ίδιο το JSON για να δημιουργήσετε σχόλια, τα οποία εξαλείφουν πλήρως τη συλλογιστική και φορτώνουν το χώρο δεδομένων ανάλυσης χωρίς κανένα καλό λόγο για ακριβώς το ίδιο αποτέλεσμα και πιθανά ζητήματα, όπως είναι: αρχείο με σχόλια.
Εάν προσπαθήσετε να βάλετε σχόλια (χρησιμοποιώντας // ή / * * / ή # για παράδειγμα), τότε ορισμένοι αναλυτές θα αποτύχουν επειδή αυτό δεν είναι
εντός της προδιαγραφής JSON. Επομένως δεν πρέπει ποτέ να το κάνετε αυτό.
Εδώ, για παράδειγμα, όπου το σύστημα χειρισμού εικόνων μου έχει αποθηκεύσει σημειώσεις εικόνας και μερικές βασικές μορφοποιημένες (σχόλια) πληροφορίες που σχετίζονται με αυτές (στο κάτω μέρος)
{
"Σημειώσεις": [
{
"anchorX": 333,
"άγκυραY": 265,
"areaMode": "Ellipse",
"έκτασηX": 356,
"έκτασηY": 294,
"αδιαφάνεια": 0,5,
"text": "Ελλειπτική περιοχή στην κορυφή",
"textX": 333,
"textY": 265,
"title": "Σημείωση 1"
},
{
"anchorX": 87,
"άγκυραY": 385,
"areaMode": "ορθογώνιο",
"extX": 109,
"έκτασηY": 412,
"αδιαφάνεια": 0,5,
"text": "Rect area \ non bottom",
"textX": 98,
"textY": 385,
"title": "Σημείωση 2"
},
{
"anchorX": 69,
"άγκυραY": 104,
"areaMode": "Πολύγωνο",
"έκτασηX": 102,
"έκτασηY": 136,
"αδιαφάνεια": 0,5,
"pointList": [
{
"εγώ": 0,
"x": 83,
"γ": 104
},
{
"εγώ": 1,
"x": 69,
"γ": 136
},
{
"εγώ": 2,
"x": 102,
"γ": 132
},
{
"εγώ": 3,
"x": 83,
"γ": 104
}
],
"text": "Απλό πολύγωνο",
"textX": 85,
"textY": 104,
"title": "Σημείωση 3"
}
],
"imageXW": 512,
"imageYW": 512,
"imageName": "lena_std.ato",
"tinyDocs": {
"c01": "Δεδομένα σημείωσης εικόνας JSON:",
"c02": "-------------------------",
"c03": "",
"c04": "Αυτά τα δεδομένα περιέχουν σημειώσεις εικόνας και σχετική περιοχή",
"c05": "πληροφορίες επιλογής που παρέχουν ένα μέσο για",
"c06": "συλλογή εικόνων για εμφάνιση συμβολισμών με ελλειπτικό",
"c07": "ενδείξεις ορθογώνιας, πολυγωνικής ή ελεύθερης ζώνης",
"c08": "πάνω από μια εικόνα που εμφανίζεται σε έναν επισκέπτη στοά."
"c09": "",
"c10": "Οι θέσεις X και Y είναι όλες στην εικόναχώρος. Η εικόνα",
"c11": "η ανάλυση δίνεται ως imageXW και imageYW, η οποία",
"c12": "χρησιμοποιείτε για να κλιμακώσετε τις περιοχές σημειογραφίας στα κατάλληλα",
"c13": "τοποθεσίες και μεγέθη για την εμφάνιση της εικόνας",
"c14": "ανεξάρτητα από την κλίμακα.",
"c15": "",
"c16": "Για τις ελλείψεις, η άγκυρα είναι το κέντρο της έλλειψης",
"c17": "και οι εκτάσεις είναι οι ακτίνες X και Y αντίστοιχα.",
"c18": "",
"c19": "Για ορθογώνια, η άγκυρα είναι πάνω αριστερά και το",
"c20": "οι επεκτάσεις είναι κάτω δεξιά.",
"c21": "",
"c22": "Για λειτουργίες περιοχής ελεύθερου και πολυγώνου, η λίστα σημείων",
"c23": "περιέχει μια σειρά αριθμημένων σημείων XY. Εάν η περιοχή",
"c24": "είναι κλειστό, το τελευταίο σημείο θα είναι το ίδιο με το",
"c25": "πρώτα, οπότε το μόνο που πρέπει να ανησυχείς είναι να σχεδιάζεις",
"c26": "γραμμές μεταξύ των σημείων της λίστας. Άγκυρα και έκταση",
"c27": "έχουν ρυθμιστεί στην επάνω αριστερή και κάτω δεξιά πλευρά της ένδειξης",
"c28": "περιοχή, και μπορεί να χρησιμοποιηθεί ως απλοϊκό ορθογώνιο",
"c29": "ανίχνευση για τη θέση του ποντικιού πάνω από αυτούς τους τύπους",
"c30": "περιοχών.",
"c31": "",
"c32": "Οι θέσεις textx και texty παρέχουν βασική θέση",
"c33": "πληροφορίες που θα σας βοηθήσουν να εντοπίσετε τις πληροφορίες κειμένου",
"c34": "σε λογική τοποθεσία που σχετίζεται με την περιοχή",
"c35": "ένδειξη.",
"c36": "",
"c37": "Η αδιαφάνεια είναι μια τιμή μεταξύ 0 και 1, όπου το .5 αντιπροσωπεύει",
"c38": "ένα αδιαφανές σκηνικό 50% και 1,0 αντιπροσωπεύει ένα πλήρως αδιαφανές",
"c39": "σκηνικό. Η σύσταση είναι να σχεδιάζονται περιοχές",
"c40": "μόνο αν ο χρήστης τοποθετήσει το δείκτη πάνω από την εικόνα",
"c41": "και να σχεδιαστεί το κείμενο που σχετίζεται με τις περιοχές",
"c42": "μόνο αν ο χρήστης τοποθετήσει το δείκτη πάνω από το υποδεικνυόμενο",
"c43": "περιοχή."
}
}
|
Χρησιμοποιούμε σχόλια strip-json για το έργο μας. Υποστηρίζει κάτι όπως:
/ *
* Περιγραφή
* /
{
// ουράνια τόξα
"μονόκερος": / * ❤ * / "κέικ"
}
Απλώς εγκαταστήστε npm - αποθηκεύστε strip-json-comments για να το εγκαταστήσετε και να το χρησιμοποιήσετε όπως:
var strip_json_comments = απαιτείται ('strip-json-comments')
var json = '{/ * rainbows * / "unicorn": "κέικ"}';
JSON.parse (strip_json_comments (json));
// => {μονόκερος: 'κέικ'}
|
Στην περίπτωσή μου, πρέπει να χρησιμοποιήσω σχόλια για σκοπούς εντοπισμού σφαλμάτων πριν από την έξοδο της δομής JSON. Αποφάσισα λοιπόν να χρησιμοποιήσω πληροφορίες εντοπισμού σφαλμάτων στην κεφαλίδα HTTP, για να αποφύγω το σπάσιμο του πελάτη
κεφαλίδα ("My-Json-Comment: Ναι, ξέρω ότι είναι μια λύση ;-)");
|
Για να κόψω ένα αντικείμενο JSON σε μέρη, προσθέτω γραμμές "ψεύτικου σχολίου":
{
"#############################" : "Μέρος 1",
"data1": "τιμή1",
"data2": "τιμή2",
"#############################" : "Μέρος 2ο",
"data4": "τιμή3",
"δεδομένα3": "τιμή4"
}
|
1
2
Επόμενο
Πολύ ενεργή ερώτηση. Κερδίστε 10 φήμη για να απαντήσετε σε αυτήν την ερώτηση. Η απαίτηση φήμης συμβάλλει στην προστασία αυτής της ερώτησης από ανεπιθύμητες ενέργειες και μη απαντήσεις.
Δεν είναι η απάντηση που ψάχνετε; Περιηγηθείτε σε άλλες ερωτήσεις με σχόλια json ή κάντε τη δική σας ερώτηση.